﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public class GraficosData
{
	private string stringConexion;

    public GraficosData(string strConexion)
	{
		stringConexion = strConexion;
	}

	public DataSet GetGraficosPorGrupo(string id_grupo)
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los Graficos para el grupo id_grupo
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetGraficosPorGrupo", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			adapter.SelectCommand.Parameters.Add(param);

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public void AgregarGrafico(DGrafico grafico)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_AgregarGrafico", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = grafico.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = grafico.nombre; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo", SqlDbType.VarChar); param.Value = grafico.titulo; cmd.Parameters.Add(param);
			param = new SqlParameter("@descripcion", SqlDbType.VarChar); param.Value = grafico.descripcion; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_fuente_datos", SqlDbType.VarChar); param.Value = grafico.id_fuente_datos; cmd.Parameters.Add(param);
			param = new SqlParameter("@string_conexion", SqlDbType.VarChar); param.Value = grafico.string_conexion; cmd.Parameters.Add(param);
			param = new SqlParameter("@query", SqlDbType.VarChar); param.Value = grafico.query; cmd.Parameters.Add(param);
			param = new SqlParameter("@tipo_grafico", SqlDbType.VarChar); param.Value = grafico.tipo_grafico; cmd.Parameters.Add(param);
			param = new SqlParameter("@formato_valor", SqlDbType.VarChar); param.Value = grafico.formato_valor; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_eje_x", SqlDbType.VarChar); param.Value = grafico.titulo_eje_x; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_eje_y", SqlDbType.VarChar); param.Value = grafico.titulo_eje_y; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_serie_1", SqlDbType.VarChar); param.Value = grafico.titulo_serie_1; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_serie_2", SqlDbType.VarChar); param.Value = grafico.titulo_serie_2; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_indicador_asociado", SqlDbType.VarChar); param.Value = grafico.nombre_indicador_asociado; cmd.Parameters.Add(param);
			param = new SqlParameter("@bajo_demanda", SqlDbType.TinyInt); param.Value = grafico.bajo_demanda; cmd.Parameters.Add(param);
			param = new SqlParameter("@utilizar_cache", SqlDbType.TinyInt); param.Value = grafico.utilizar_cache; cmd.Parameters.Add(param);
			param = new SqlParameter("@intervalo_actualizacion", SqlDbType.BigInt); param.Value = grafico.intervalo_actualizacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@cantidad_series", SqlDbType.Int); param.Value = grafico.cantidad_series; cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

	public void ModificarGrafico(DGrafico grafico)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_ModificarGrafico", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = grafico.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = grafico.nombre; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_viejo", SqlDbType.VarChar); param.Value = grafico.nombre_viejo; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo", SqlDbType.VarChar); param.Value = grafico.titulo; cmd.Parameters.Add(param);
			param = new SqlParameter("@descripcion", SqlDbType.VarChar); param.Value = grafico.descripcion; cmd.Parameters.Add(param);
			param = new SqlParameter("@id_fuente_datos", SqlDbType.VarChar); param.Value = grafico.id_fuente_datos; cmd.Parameters.Add(param);
			param = new SqlParameter("@string_conexion", SqlDbType.VarChar); param.Value = grafico.string_conexion; cmd.Parameters.Add(param);
			param = new SqlParameter("@query", SqlDbType.VarChar); param.Value = grafico.query; cmd.Parameters.Add(param);
			param = new SqlParameter("@tipo_grafico", SqlDbType.VarChar); param.Value = grafico.tipo_grafico; cmd.Parameters.Add(param);
			param = new SqlParameter("@formato_valor", SqlDbType.VarChar); param.Value = grafico.formato_valor; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_eje_x", SqlDbType.VarChar); param.Value = grafico.titulo_eje_x; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_eje_y", SqlDbType.VarChar); param.Value = grafico.titulo_eje_y; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_serie_1", SqlDbType.VarChar); param.Value = grafico.titulo_serie_1; cmd.Parameters.Add(param);
			param = new SqlParameter("@titulo_serie_2", SqlDbType.VarChar); param.Value = grafico.titulo_serie_2; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre_indicador_asociado", SqlDbType.VarChar); param.Value = grafico.nombre_indicador_asociado; cmd.Parameters.Add(param);
			param = new SqlParameter("@bajo_demanda", SqlDbType.TinyInt); param.Value = grafico.bajo_demanda; cmd.Parameters.Add(param);
			param = new SqlParameter("@utilizar_cache", SqlDbType.TinyInt); param.Value = grafico.utilizar_cache; cmd.Parameters.Add(param);
			param = new SqlParameter("@intervalo_actualizacion", SqlDbType.BigInt); param.Value = grafico.intervalo_actualizacion; cmd.Parameters.Add(param);
			param = new SqlParameter("@cantidad_series", SqlDbType.Int); param.Value = grafico.cantidad_series; cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

	public void EliminarGrafico(DGrafico grafico)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_EliminarGrafico", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar); param.Value = grafico.id_grupo; cmd.Parameters.Add(param);
			param = new SqlParameter("@nombre", SqlDbType.VarChar); param.Value = grafico.nombre; cmd.Parameters.Add(param);
			
			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}
	
	public DataSet GetCantidadSeries()
	{
		DataTable dt = new DataTable();
		dt.Columns.Add("id"); dt.Columns.Add("nombre");
		DataRow dr = dt.NewRow();
		dr["id"] = "1"; dr["nombre"] = "1";
		dt.Rows.Add(dr);
		dr = dt.NewRow();
		dr["id"] = "2"; dr["nombre"] = "2";
		dt.Rows.Add(dr);
		DataSet ds = new DataSet();
		ds.Tables.Add(dt);
		return ds;
	}
	
	public DataSet GetTiposGrafico()
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los tipos de graficos
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetTiposGraficos", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public DataSet GetIndicadoresAsociables(string id_grupo)
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos indicadores asociables a un grafico
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetIndicadoresAsociables", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			adapter.SelectCommand.Parameters.Add(param);

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}
}
